package cn.wolfcode.crm.web.controller;

import cn.wolfcode.crm.query.CustomerReportQuery;
import cn.wolfcode.crm.service.ICustomerReportService;
import cn.wolfcode.crm.util.MessageUtil;
import com.alibaba.fastjson.JSON;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Controller
@RequestMapping("/customerReport")
public class CustomerReportController {

    @Autowired
    private ICustomerReportService customerReportService;

    // 提供一个方法处理查询所有数据请求，响应 HTML
    @RequestMapping("/list")
    public String list(Model model, @ModelAttribute("qo") CustomerReportQuery qo) {
        //调用service的方法的到结果集
        PageInfo pageInfo = customerReportService.query(qo);
        //共享结果集：在页面遍历显示
        model.addAttribute("result", pageInfo);
        return "customerReport/list"; //返回视图名称：加上前缀和后缀的ftl
    }


    //柱状图界面
    @RequestMapping("/listByBar")
    //@ResponseBody
    public String listBar(Model model, @ModelAttribute("qo") CustomerReportQuery qo){
        List<Map> list = customerReportService.listAll(qo);
        //提供一个存储X轴的数据的集合
        ArrayList xList = new ArrayList();

        //提供一个存储Y轴的数据的集合
        ArrayList yList = new ArrayList();
        //遍历结果集：将其中的数据 转换成前台能接受的String类型给的数据
        for (Map map : list){
            xList.add(map.get("groupType"));
            yList.add(map.get("number"));
        }

        //将全部满足条件到的结果共享出去
        model.addAttribute("xList", JSON.toJSONString(xList));
        model.addAttribute("yList", JSON.toJSONString(yList));
        //·柱图中左上角显示的对应的类型的名字选项，使用工具来拼接字符串
        model.addAttribute("groupTypeName", MessageUtil.changMsg(qo));


        return "customerReport/listByBar";
    }

    //柱状图界面
    @RequestMapping("/listByPie")
    //@ResponseBody
    public String listPie(Model model, @ModelAttribute("qo") CustomerReportQuery qo){
        List<Map> list = customerReportService.listAll(qo);
        //提供一个存储X轴的数据的集合
        ArrayList xList = new ArrayList();

        //提供一个存储Y轴的数据的集合
        ArrayList yList = new ArrayList();
        //遍历结果集：将X Y 的数据分开装到集合中
        for (Map map : list){
            xList.add(map.get("groupType"));//饼状图groupType没有变化
            //饼状图的饼中的数据时简直对：value : number ; name : groupType
            HashMap<String, Object> temp = new HashMap<>();
            temp.put("name", map.get("groupType"));
            temp.put("value", map.get("number"));
            yList.add(temp);//将准备好的键值对放到list中
        }

        //将全部满足条件到的结果共享出去：将其中的数据 转换成前台能接受的String类型给的数据
        model.addAttribute("xList", JSON.toJSONString(xList));
        model.addAttribute("yList", JSON.toJSONString(yList));
        //饼状图中左上角显示的对应的类型的名字选项，使用工具来拼接字符串
        model.addAttribute("groupTypeName", MessageUtil.changMsg(qo));

        return "customerReport/listByPie";
    }


}
